﻿namespace TCPBaseModbusTCP.Models
{
    public class TcpServerSetting
    {
        public string IpAddress { get; set; } = "0.0.0.0";
        public int Port { get; set; } = 502; // Modbus TCP默认端口
        public int BufferSize { get; set; } = 2048; // 适配Modbus最大报文长度
        public int MaxConnections { get; set; } = 100;
        public List<string> GatewayIpWhitelist { get; set; } = new();
        public int HandshakeTimeoutMs { get; set; } = 5000;

        // 普通客户端消息格式验证（自定义协议）
        public string ClientMessagePattern { get; set; } = @"^CMD:\w+;PARAM:.+$";   // 如 CMD:SET;PARAM:ON

        // Modbus TCP协议相关配置（网关消息验证用）
        public ushort MinTransactionId { get; set; } = 1;
        public ushort MaxTransactionId { get; set; } = 65535;
        public byte MinFunctionCode { get; set; } = 1;
        public byte MaxFunctionCode { get; set; } = 127; // 1-127为有效功能码，128-255为异常响应
    }

    

    // Modbus TCP报文结构模型（用于解析和验证）
    public class ModbusTcpPacket
    {
        // MBAP头（6字节）
        public ushort TransactionId { get; set; } // 事务标识符（2字节）
        public ushort ProtocolId { get; set; }   // 协议标识符（2字节，固定为0）
        public ushort Length { get; set; }       // 长度（2字节，后续字节数：UnitId + PDU）
        public byte UnitId { get; set; }         // 单元标识符（1字节）

        // PDU（协议数据单元）
        public byte FunctionCode { get; set; }   // 功能码（1字节）
        public byte[] Data { get; set; }         // 数据区（N字节）

        // 原始字节（用于转发）
        public byte[] RawBytes { get; set; }
    }

}
